var SyllabaryConverter = function(db) {
	this.initialize(db);
};
SyllabaryConverter.prototype = {
	initialize: function(db) {
		this.db = db;
		this.keylen = 0;
		for (var i=0; i<db.length; i++) {
			var currlen = db[i][0].length;
			if (currlen > this.keylen) {
				this.keylen = currlen;
			}
		}
	},
	convert: function(input) {
		var output = "";
		next: while (input.length > 0) {
			var head;
			for (var i=0; i<this.db.length; i++) {
				var item = this.db[i];
				head = input.substring(0, item[0].length);
				if (head == item[0]) {
					output += item[1];
					input = input.substring(item[0].length) + item[2];
					continue next;
				}
			}
			output += head;
			input = input.substring(1);
		}
		return output;
	}
};

var HIRA2HEPB = [
['う゛ぁ', 'va', ''],
['う゛ぃ', 'vi', ''],
['う゛', 'vu', ''],
['う゛ぇ', 've', ''],
['う゛ぉ', 'vo', ''],
['っう゛', 'v', 'う゛'],
['っぁ', 'xxa', ''],
['っぃ', 'xxi', ''],
['っぅ', 'xxu', ''],
['っぇ', 'xxe', ''],
['っぉ', 'xxo', ''],
['っか', 'kka', ''],
['っき', 'k', 'き'],
['っく', 'kku', ''],
['っけ', 'kke', ''],
['っこ', 'kko', ''],
['っが', 'gga', ''],
['っぎ', 'g', 'ぎ'],
['っぐ', 'ggu', ''],
['っげ', 'gge', ''],
['っご', 'ggo', ''],
['っさ', 'ssa', ''],
['っし', 's', 'し'],
['っす', 'ssu', ''],
['っせ', 'sse', ''],
['っそ', 'sso', ''],
['っざ', 'zza', ''],
['っじ', 'j', 'じ'],
['っず', 'zzu', ''],
['っぜ', 'zze', ''],
['っぞ', 'zzo', ''],
['った', 'tta', ''],
['っち', 'c', 'ち'],
['っつ', 't', 'つ'],
['って', 'tte', ''],
['っと', 'tto', ''],
['っだ', 'dda', ''],
['っぢ', 'j', 'ぢ'],
['っづ', 'ddu', ''],
['っで', 'dde', ''],
['っど', 'ddo', ''],
['っは', 'hha', ''],
['っひ', 'h', 'ひ'],
['っふ', 'ffu', ''],
['っへ', 'hhe', ''],
['っほ', 'hho', ''],
['っば', 'bba', ''],
['っび', 'b', 'び'],
['っぶ', 'bbu', ''],
['っべ', 'bbe', ''],
['っぼ', 'bbo', ''],
['っぱ', 'ppa', ''],
['っぴ', 'p', 'ぴ'],
['っぷ', 'ppu', ''],
['っぺ', 'ppe', ''],
['っぽ', 'ppo', ''],
['っま', 'mma', ''],
['っみ', 'm', 'み'],
['っむ', 'mmu', ''],
['っめ', 'mme', ''],
['っも', 'mmo', ''],
['っや', 'yya', ''],
['っゆ', 'yyu', ''],
['っよ', 'yyo', ''],
['っゃ', 'xxya', ''],
['っゅ', 'xxyu', ''],
['っょ', 'xxyo', ''],
['っら', 'rra', ''],
['っり', 'r', 'り'],
['っる', 'rru', ''],
['っれ', 'rre', ''],
['っろ', 'rro', ''],
['っゎ', 'xxwa', ''],
['っわ', 'wwa', ''],
['っゐ', 'wwi', ''],
['っゑ', 'wwe', ''],
['っを', 'wwo', ''],
['きゃ', 'kya', ''],
['きぃ', 'kyi', ''],
['きゅ', 'kyu', ''],
['きぇ', 'kye', ''],
['きょ', 'kyo', ''],
['ぎゃ', 'gya', ''],
['ぎぃ', 'gyi', ''],
['ぎゅ', 'gyu', ''],
['ぎぇ', 'gye', ''],
['ぎょ', 'gyo', ''],
['しゃ', 'sha', ''],
['しぃ', 'syi', ''],
['しゅ', 'shu', ''],
['しぇ', 'she', ''],
['しょ', 'sho', ''],
['じゃ', 'ja', ''],
['じぃ', 'zyi', ''],
['じゅ', 'ju', ''],
['じぇ', 'je', ''],
['じょ', 'jo', ''],
['ちゃ', 'cha', ''],
['ちぃ', 'tyi', ''],
['ちゅ', 'chu', ''],
['ちぇ', 'che', ''],
['ちょ', 'cho', ''],
['ぢゃ', 'dya', ''],
['ぢぃ', 'dyi', ''],
['ぢゅ', 'dyu', ''],
['ぢぇ', 'dye', ''],
['ぢょ', 'dyo', ''],
['でぃ', 'dhi', ''],
['にゃ', 'nya', ''],
['にぃ', 'nyi', ''],
['にゅ', 'nyu', ''],
['にぇ', 'nye', ''],
['にょ', 'nyo', ''],
['ひゃ', 'hya', ''],
['ひぃ', 'hyi', ''],
['ひゅ', 'hyu', ''],
['ひぇ', 'hye', ''],
['ひょ', 'hyo', ''],
['びゃ', 'bya', ''],
['びぃ', 'byi', ''],
['びゅ', 'byu', ''],
['びぇ', 'bye', ''],
['びょ', 'byo', ''],
['ぴゃ', 'pya', ''],
['ぴぃ', 'pyi', ''],
['ぴゅ', 'pyu', ''],
['ぴぇ', 'pye', ''],
['ぴょ', 'pyo', ''],
['みゃ', 'mya', ''],
['みぃ', 'myi', ''],
['みゅ', 'myu', ''],
['みぇ', 'mye', ''],
['みょ', 'myo', ''],
['りゃ', 'rya', ''],
['りぃ', 'ryi', ''],
['りゅ', 'ryu', ''],
['りぇ', 'rye', ''],
['りょ', 'ryo', ''],
['んあ', 'nna', ''],
['んい', 'nni', ''],
['んう', 'nnu', ''],
['んえ', 'nne', ''],
['んお', 'nno', ''],
['あ', 'a', ''],
['い', 'i', ''],
['う', 'u', ''],
['え', 'e', ''],
['お', 'o', ''],
['ぁ', 'xa', ''],
['ぃ', 'xi', ''],
['ぅ', 'xu', ''],
['ぇ', 'xe', ''],
['ぉ', 'xo', ''],
['か', 'ka', ''],
['き', 'ki', ''],
['く', 'ku', ''],
['け', 'ke', ''],
['こ', 'ko', ''],
['が', 'ga', ''],
['ぎ', 'gi', ''],
['ぐ', 'gu', ''],
['げ', 'ge', ''],
['ご', 'go', ''],
['さ', 'sa', ''],
['し', 'shi', ''],
['す', 'su', ''],
['せ', 'se', ''],
['そ', 'so', ''],
['ざ', 'za', ''],
['じ', 'ji', ''],
['ず', 'zu', ''],
['ぜ', 'ze', ''],
['ぞ', 'zo', ''],
['た', 'ta', ''],
['ち', 'chi', ''],
['つ', 'tsu', ''],
['て', 'te', ''],
['と', 'to', ''],
['だ', 'da', ''],
['ぢ', 'di', ''],
['づ', 'du', ''],
['で', 'de', ''],
['ど', 'do', ''],
['っ', 'xtu', ''],
['な', 'na', ''],
['に', 'ni', ''],
['ぬ', 'nu', ''],
['ね', 'ne', ''],
['の', 'no', ''],
['は', 'ha', ''],
['ひ', 'hi', ''],
['ふ', 'fu', ''],
['へ', 'he', ''],
['ほ', 'ho', ''],
['ば', 'ba', ''],
['び', 'bi', ''],
['ぶ', 'bu', ''],
['べ', 'be', ''],
['ぼ', 'bo', ''],
['ぱ', 'pa', ''],
['ぴ', 'pi', ''],
['ぷ', 'pu', ''],
['ぺ', 'pe', ''],
['ぽ', 'po', ''],
['ま', 'ma', ''],
['み', 'mi', ''],
['む', 'mu', ''],
['め', 'me', ''],
['も', 'mo', ''],
['ゃ', 'xya', ''],
['や', 'ya', ''],
['ゅ', 'xyu', ''],
['ゆ', 'yu', ''],
['ょ', 'xyo', ''],
['よ', 'yo', ''],
['ら', 'ra', ''],
['り', 'ri', ''],
['る', 'ru', ''],
['れ', 're', ''],
['ろ', 'ro', ''],
['ゎ', 'xwa', ''],
['わ', 'wa', ''],
['ゐ', 'wi', ''],
['ゑ', 'we', ''],
['を', 'wo', ''],
['ん', 'n', ''],
['ー', '-', '']];
var hira2hepb = new SyllabaryConverter(HIRA2HEPB);

var KATA2HIRA = [
['ヴ', 'う゛', ''],
['ア', 'あ', ''],
['イ', 'い', ''],
['ウ', 'う', ''],
['エ', 'え', ''],
['オ', 'お', ''],
['ァ', 'ぁ', ''],
['ィ', 'ぃ', ''],
['ゥ', 'ぅ', ''],
['ェ', 'ぇ', ''],
['ォ', 'ぉ', ''],
['カ', 'か', ''],
['キ', 'き', ''],
['ク', 'く', ''],
['ケ', 'け', ''],
['コ', 'こ', ''],
['ガ', 'が', ''],
['ギ', 'ぎ', ''],
['グ', 'ぐ', ''],
['ゲ', 'げ', ''],
['ゴ', 'ご', ''],
['サ', 'さ', ''],
['シ', 'し', ''],
['ス', 'す', ''],
['セ', 'せ', ''],
['ソ', 'そ', ''],
['ザ', 'ざ', ''],
['ジ', 'じ', ''],
['ズ', 'ず', ''],
['ゼ', 'ぜ', ''],
['ゾ', 'ぞ', ''],
['タ', 'た', ''],
['チ', 'ち', ''],
['ツ', 'つ', ''],
['テ', 'て', ''],
['ト', 'と', ''],
['ダ', 'だ', ''],
['ヂ', 'ぢ', ''],
['ヅ', 'づ', ''],
['デ', 'で', ''],
['ド', 'ど', ''],
['ッ', 'っ', ''],
['ナ', 'な', ''],
['ニ', 'に', ''],
['ヌ', 'ぬ', ''],
['ネ', 'ね', ''],
['ノ', 'の', ''],
['ハ', 'は', ''],
['ヒ', 'ひ', ''],
['フ', 'ふ', ''],
['ヘ', 'へ', ''],
['ホ', 'ほ', ''],
['バ', 'ば', ''],
['ビ', 'び', ''],
['ブ', 'ぶ', ''],
['ベ', 'べ', ''],
['ボ', 'ぼ', ''],
['パ', 'ぱ', ''],
['ピ', 'ぴ', ''],
['プ', 'ぷ', ''],
['ペ', 'ぺ', ''],
['ポ', 'ぽ', ''],
['マ', 'ま', ''],
['ミ', 'み', ''],
['ム', 'む', ''],
['メ', 'め', ''],
['モ', 'も', ''],
['ャ', 'ゃ', ''],
['ヤ', 'や', ''],
['ュ', 'ゅ', ''],
['ユ', 'ゆ', ''],
['ョ', 'ょ', ''],
['ヨ', 'よ', ''],
['ラ', 'ら', ''],
['リ', 'り', ''],
['ル', 'る', ''],
['レ', 'れ', ''],
['ロ', 'ろ', ''],
['ヮ', 'ゎ', ''],
['ワ', 'わ', ''],
['ヰ', 'ゐ', ''],
['ヱ', 'ゑ', ''],
['ヲ', 'を', ''],
['ン', 'ん', '']];
var kata2hira = new SyllabaryConverter(KATA2HIRA);

var ROMA2HIRA = [
['-', 'ー', ''],
['~', '～', ''],
['va', 'う゛ぁ', ''],
['vi', 'う゛ぃ', ''],
['vu', 'う゛', ''],
['ve', 'う゛ぇ', ''],
['vo', 'う゛ぉ', ''],
['vv', 'っ', 'v'],
['xx', 'っ', 'x'],
['kk', 'っ', 'k'],
['gg', 'っ', 'g'],
['ss', 'っ', 's'],
['zz', 'っ', 'z'],
['jj', 'っ', 'j'],
['tt', 'っ', 't'],
['dd', 'っ', 'd'],
['hh', 'っ', 'h'],
['ff', 'っ', 'f'],
['bb', 'っ', 'b'],
['pp', 'っ', 'p'],
['mm', 'っ', 'm'],
['yy', 'っ', 'y'],
['rr', 'っ', 'r'],
['ww', 'っ', 'w'],
['cc', 'っ', 'c'],
['kya', 'きゃ', ''],
['kyi', 'きぃ', ''],
['kyu', 'きゅ', ''],
['kye', 'きぇ', ''],
['kyo', 'きょ', ''],
['gya', 'ぎゃ', ''],
['gyi', 'ぎぃ', ''],
['gyu', 'ぎゅ', ''],
['gye', 'ぎぇ', ''],
['gyo', 'ぎょ', ''],
['sya', 'しゃ', ''],
['syi', 'しぃ', ''],
['syu', 'しゅ', ''],
['sye', 'しぇ', ''],
['syo', 'しょ', ''],
['sha', 'しゃ', ''],
['shi', 'し', ''],
['shu', 'しゅ', ''],
['she', 'しぇ', ''],
['sho', 'しょ', ''],
['zya', 'じゃ', ''],
['zyi', 'じぃ', ''],
['zyu', 'じゅ', ''],
['zye', 'じぇ', ''],
['zyo', 'じょ', ''],
['tya', 'ちゃ', ''],
['tyi', 'ちぃ', ''],
['tyu', 'ちゅ', ''],
['tye', 'ちぇ', ''],
['tyo', 'ちょ', ''],
['cha', 'ちゃ', ''],
['chi', 'ち', ''],
['chu', 'ちゅ', ''],
['che', 'ちぇ', ''],
['cho', 'ちょ', ''],
['dya', 'ぢゃ', ''],
['dyi', 'ぢぃ', ''],
['dyu', 'ぢゅ', ''],
['dye', 'ぢぇ', ''],
['dyo', 'ぢょ', ''],
['tha', 'てゃ', ''],
['thi', 'てぃ', ''],
['thu', 'てゅ', ''],
['the', 'てぇ', ''],
['tho', 'てょ', ''],
['dha', 'でゃ', ''],
['dhi', 'でぃ', ''],
['dhu', 'でゅ', ''],
['dhe', 'でぇ', ''],
['dho', 'でょ', ''],
['nya', 'にゃ', ''],
['nyi', 'にぃ', ''],
['nyu', 'にゅ', ''],
['nye', 'にぇ', ''],
['nyo', 'にょ', ''],
['hya', 'ひゃ', ''],
['hyi', 'ひぃ', ''],
['hyu', 'ひゅ', ''],
['hye', 'ひぇ', ''],
['hyo', 'ひょ', ''],
['bya', 'びゃ', ''],
['byi', 'びぃ', ''],
['byu', 'びゅ', ''],
['bye', 'びぇ', ''],
['byo', 'びょ', ''],
['pya', 'ぴゃ', ''],
['pyi', 'ぴぃ', ''],
['pyu', 'ぴゅ', ''],
['pye', 'ぴぇ', ''],
['pyo', 'ぴょ', ''],
['fa', 'ふぁ', ''],
['fi', 'ふぃ', ''],
['fu', 'ふ', ''],
['fe', 'ふぇ', ''],
['fo', 'ふぉ', ''],
['mya', 'みゃ', ''],
['myi', 'みぃ', ''],
['myu', 'みゅ', ''],
['mye', 'みぇ', ''],
['myo', 'みょ', ''],
['rya', 'りゃ', ''],
['ryi', 'りぃ', ''],
['ryu', 'りゅ', ''],
['rye', 'りぇ', ''],
['ryo', 'りょ', ''],
['n\'', 'ん', ''],
['nn', 'ん', ''],
['n', 'ん', ''],
['a', 'あ', ''],
['i', 'い', ''],
['u', 'う', ''],
['e', 'え', ''],
['o', 'お', ''],
['xa', 'ぁ', ''],
['xi', 'ぃ', ''],
['xu', 'ぅ', ''],
['xe', 'ぇ', ''],
['xo', 'ぉ', ''],
['ka', 'か', ''],
['ki', 'き', ''],
['ku', 'く', ''],
['ke', 'け', ''],
['ko', 'こ', ''],
['ga', 'が', ''],
['gi', 'ぎ', ''],
['gu', 'ぐ', ''],
['ge', 'げ', ''],
['go', 'ご', ''],
['sa', 'さ', ''],
['si', 'し', ''],
['su', 'す', ''],
['se', 'せ', ''],
['so', 'そ', ''],
['za', 'ざ', ''],
['zi', 'じ', ''],
['zu', 'ず', ''],
['ze', 'ぜ', ''],
['zo', 'ぞ', ''],
['ja', 'じゃ', ''],
['ji', 'じ', ''],
['ju', 'じゅ', ''],
['je', 'じぇ', ''],
['jo', 'じょ', ''],
['ta', 'た', ''],
['ti', 'ち', ''],
['tu', 'つ', ''],
['tsu', 'つ', ''],
['te', 'て', ''],
['to', 'と', ''],
['da', 'だ', ''],
['di', 'ぢ', ''],
['du', 'づ', ''],
['de', 'で', ''],
['do', 'ど', ''],
['xtu', 'っ', ''],
['xtsu', 'っ', ''],
['na', 'な', ''],
['ni', 'に', ''],
['nu', 'ぬ', ''],
['ne', 'ね', ''],
['no', 'の', ''],
['ha', 'は', ''],
['hi', 'ひ', ''],
['hu', 'ふ', ''],
['fu', 'ふ', ''],
['he', 'へ', ''],
['ho', 'ほ', ''],
['ba', 'ば', ''],
['bi', 'び', ''],
['bu', 'ぶ', ''],
['be', 'べ', ''],
['bo', 'ぼ', ''],
['pa', 'ぱ', ''],
['pi', 'ぴ', ''],
['pu', 'ぷ', ''],
['pe', 'ぺ', ''],
['po', 'ぽ', ''],
['ma', 'ま', ''],
['mi', 'み', ''],
['mu', 'む', ''],
['me', 'め', ''],
['mo', 'も', ''],
['xya', 'ゃ', ''],
['ya', 'や', ''],
['xyu', 'ゅ', ''],
['yu', 'ゆ', ''],
['xyo', 'ょ', ''],
['yo', 'よ', ''],
['ra', 'ら', ''],
['ri', 'り', ''],
['ru', 'る', ''],
['re', 'れ', ''],
['ro', 'ろ', ''],
['xwa', 'ゎ', ''],
['wa', 'わ', ''],
['wi', 'うぃ', ''],
['we', 'うぇ', ''],
['wo', 'を', ''],
['wha', 'うぁ', ''],
['whi', 'うぃ', ''],
['whe', 'うぇ', ''],
['who', 'うぉ', ''],
['wyi', 'ゐ', ''],
['wye', 'ゑ', ''],
['[', '「', ''],
[']', '」', '']];
var roma2hira = new SyllabaryConverter(ROMA2HIRA);
